home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 130_01 / gz0.asm < prev    next >
Assembly Source File  |  1985-03-09  |  7KB  |  228 lines

  1.         page    55
  2.         maclib  bds
  3.         maclib  cmac
  4.         maclib  z80
  5.  
  6.         direct
  7.         define  cursor
  8.         define  remcur
  9.         define  mwa
  10.         define  exycall
  11.         define  hidecur
  12.         enddir
  13. ;
  14. ;********************************************************
  15. ;*                                                      *
  16. ;*              BDS-C Supplementary Library             *
  17. ;*                      release 2                       *
  18. ;*                                                      *
  19. ;*              Steve de Plater, Nov. 1980              *
  20. ;*                    66 Priam St.                      *
  21. ;*                    Chester Hill,                     *
  22. ;*                    NSW, 2162                         *
  23. ;*                    Australia                         *
  24. ;*              Phone: (02) 644 4009                    *
  25. ;*                                                      *
  26. ;*              This file: GZ0.ASM release 1            *
  27. ;*                                                      *
  28. ;********************************************************
  29. ;
  30. ;********************************************************
  31. ;*                                                      *
  32. ;*      THIS IS THE ONLY FILE WHICH IS SPECIFIC         *
  33. ;*      TO THE EXIDY SORCERER.                          *
  34. ;*      IT IS ALSO THE ONLY FILE REQUIRING THE          *
  35. ;*      "Z80.LIB" MACRO LIBRARY.                        *
  36. ;*      TO RECONFIGURE FOR YOUR OWN SYSTEM ALL THAT     *
  37. ;*      IS ESSENTIAL IS TO PROVIDE A "cursor(x,y)"      *
  38. ;*      FUNCTION WHICH CONFORMS TO THE FOLLOWING        *
  39. ;*      STANDARDS:                                      *
  40. ;*      (1)     PLACES THE CURSOR AT POSITION (X,Y)     *
  41. ;*              ON THE VIDEO SCREEN (WHERE X IS THE     *
  42. ;*              ROW (DOWN) AND Y IS THE COLUMN (ACROSS))*
  43. ;*      (2)     IF (X,Y) IS NOT A VALID SCREEN POSITION *
  44. ;*              (EG: -VE) THEN NO CURSOR MOVEMENT IS    *
  45. ;*              PERFORMED.                              *
  46. ;*      (3)     IN ALL CASES THE ADDRESS OF THE CURSOR  *
  47. ;*              (ON COMPLETION) IS RETURNED TO THE      *
  48. ;*              CALLING FUNCTION.                       *
  49. ;*                                                      *
  50. ;********************************************************
  51. ;
  52. ;============================================================
  53. ;
  54. ; int cursor(x,y);
  55. ;
  56. ;   moves the cursor to position x (line), y (column) of
  57. ;   the Sorcerer screen. (if possible)!
  58. ;   Returns the offset from the beginning of the screen RAM
  59. ;   of the new cursor position.
  60.  
  61.         prelude cursor
  62.         call    arghak          ;get the arguements
  63.         push    b               ;we need it!
  64.  
  65. getiy   equ     0e1a2h          ;Exidy Monitor entry points
  66. wcur    equ     0e9cch          ;write cursor
  67. rec     equ     0e9e8h          ;remove the old one
  68. ptrset  equ     0e9d6h          ;find the cursor address
  69.  
  70.         lda     arg2            ;get the column
  71.         ora     a
  72.         reloc   jm,curses       ;you can't have a -ve column!
  73.         cpi     64
  74.         reloc   jnc,curses      ;or one > 63
  75.         lda     arg1            ;get the line
  76.         ora     a
  77.         reloc   jm,curses       ;you can't have a -ve line!
  78.         cpi     30
  79.         reloc   jnc,curses      ;or one > 29
  80.  
  81.         lda     arg1+1
  82.         ora     a
  83.         reloc   jnz,curses
  84.         lda     arg2+1
  85.         ora     a
  86.         reloc   jnz,curses
  87.  
  88.         call    getiy
  89.         call    rec
  90.         lda     arg1
  91.         mov     e,a             ;and multiply it be 64
  92.         mvi     d,0
  93.         mvi     b,6
  94. cur04:  sla     e
  95.         rl      d
  96.         djnz    cur04
  97.         stiy    e,68h           ;and save it in the MWA
  98.         stiy    d,69h           ;(both bytes)
  99.         lda     arg2            ;now get the column
  100.         stiy    a,6ah           ;and save it too
  101.         stiyi   0,6bh           ;high byte is zero
  102.         call    wcur            ;and put the cursor there!
  103.  
  104. curses: call    ptrset          ;just in case we hadn't
  105.         pop     b               ;told you we'd need it
  106.         ret                     ;home we go
  107.         postlude cursor         ;generate relocation table
  108.  
  109. getiy   equ     0e1a2h
  110. pushix  equ     0e5ddh
  111. pushiy  equ     0e5fdh
  112. inxix   equ     023ddh
  113. scan    equ     0e225h
  114. ;
  115. ;==============================================================
  116. ;
  117. ; int remcur()
  118. ;
  119. ;   Removes the cursor from the screen.
  120. ;   Returns the cursor address.
  121. ;
  122.         prelude remcur
  123.  
  124.         push    b
  125.         call    getiy
  126.         call    rec
  127.         pop     b
  128.         ret
  129.  
  130.         postlude remcur
  131. ;
  132. ;==============================================================
  133. ;
  134. ; int mwa();
  135. ;
  136. ;   Returns the MWA address.
  137. ;
  138.         prelude mwa
  139.  
  140.         call    getiy
  141.         dw      pushiy
  142.         pop     h
  143.         ret
  144.  
  145.         postlude mwa
  146. ;
  147. ;============================================================= 
  148. ;
  149. ; int exycall();
  150. ;
  151. ;   Calls the Exidy Standard Monitor
  152. ;   using the monitor command found at MWA.
  153. ;   Returns 0 if illegal command (or no command)
  154. ;     or    1 if command successfully executed.
  155. ;
  156. ;   WARNING: This function may not return AT ALL if you
  157. ;   crash it in the Monitor itself! ;BE WARNED!
  158. ;
  159.         prelude exycall
  160.  
  161.         push    b               ;just in case!
  162.         dw      pushiy          ;move IY
  163.         pop     h               ;  to HL
  164.         call    scan            ;get delims
  165.         jr      z,exyc5         ;NONE!
  166.         db      0ddh,021h,012h,0e3h
  167. exyc1:  push    h
  168.         dw      pushix
  169.         mvi     b,2
  170. exyc2:  db      0ddh,07eh,00h
  171.         cmp     m
  172.         jr      nz,exyc4
  173.         inx     h
  174.         dw      inxix
  175.         djnz    exyc2
  176.         pop     d
  177.         pop     d
  178.         reloc   <lxi b,>,exyc6
  179.         push    b
  180. exyc3:  db      0ddh,06eh,00h
  181.         db      0ddh,066h,01h
  182.         pchl
  183. exyc4:  db      0ddh,0e1h
  184.         pop     h
  185.         dw      inxix
  186.         dw      inxix
  187.         dw      inxix
  188.         dw      inxix
  189.         db      0ddh,07eh,00h
  190.         ora     a
  191.         jr      nz,exyc1
  192. exyc5:  lxi     h,0
  193.         pop     b
  194.         ret
  195. exyc6:  lxi     h,1
  196.         pop     b
  197.         ret
  198.  
  199.         postlude exycall
  200. ;
  201. ;=============================================================
  202. ;
  203. ; int hidecur(c)
  204. ;   char c;
  205. ;
  206. ;       Hides the character passed under the cursor (so that
  207. ;       when the cursor is moved then "all secrets will be
  208. ;       made known" (or at least displayed on the screen))!
  209. ;
  210. ;       Returns the cursor address.
  211. ;
  212.         prelude hidecur
  213.  
  214.         call    arghak
  215.         push    b
  216.  
  217.         call    getiy                   ;we may not have it
  218.         lda     arg1                    ;the char to hide
  219.         stiy    a,067h                  ;and hide it there!
  220.         call    ptrset                  ;get cursor address
  221.  
  222.         pop     b
  223.         ret                             ;and return
  224.  
  225.         postlude hidecur
  226.   ;get cursor address
  227.  
  228.